package TDAArbol;

import java.util.Iterator;
import java.util.NoSuchElementException;

import TDALista.BoundaryViolationException;
import TDALista.EmptyListException;
import TDALista.InvalidPositionException;
import TDALista.Position;
import TDALista.PositionList;


/**
 * Iterador para el arbol, recorrido en preorden a partir de una lista
 * @author Jordan
 *
 * @param <E>
 */
public class ElementoIterador<E> implements Iterator<E> {
	private Position<E> cursor;
	private PositionList<E> lista;
	/**
	 * constructor de elementoIterador, recibe como parametro la lista de posiciones
	 * sobre la cual se iterara
	 * @param l : lista de posiciones
	 */
	public ElementoIterador(PositionList<E> l){
		lista=l;
		if(lista.isEmpty())
			cursor=null;
		else
			cursor=lista.first();
			
	}
	
	/**
	 * pregunta si tiene siguiente el iterable, empieza desde uno antes al primero
	 */
	public boolean hasNext(){
		return cursor!=null;
	}
	
	/**
	 * obtiene el elemento siguiente en el iterable
	 */
	public E next(){
		if(cursor==null)
			try {
				throw new NoSuchElementException("next:: No hay siguiente elemento");
			} catch (NoSuchElementException e1) {}
		E elemento=cursor.element();
		try {
			if(cursor!=lista.last())
				cursor=lista.next(cursor);
			else
				cursor=null;
		} catch (InvalidPositionException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (BoundaryViolationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return elemento;
	}
	
	@Override
	public void remove() {
		// TODO Auto-generated method stub
		
	}
	
}
